﻿using System;
using System.Collections;
using UnityEngine;

namespace GameLogic
{
    public class AutoRecycle : MonoBehaviour
    {
        [Tooltip("对象启用后自动回收的延迟时间（秒）。<=0 表示不使用延时自动回收。")]
        public float recycleAfterTime = 0f;

        private Coroutine recycleTimer; // 用于存储延迟回收协程的引用

        public Action OnRecycle;

        /*void OnEnable()
        {
            // 如果设置了延迟时间，则启动计时协程
            if (recycleAfterTime > 0f && recycleTimer == null)
            {
                recycleTimer = StartCoroutine(AutoRecycleTimer());
            }
        }*/

        public void StartTimer()
        {
            // 如果设置了延迟时间，则启动计时协程
            if (recycleAfterTime > 0f && recycleTimer == null)
            {
                recycleTimer = StartCoroutine(AutoRecycleTimer());
            }
        }

        void OnDisable()
        {
            // 在对象失活时，停止可能正在运行的延迟回收协程
            if (recycleTimer != null)
            {
                StopCoroutine(recycleTimer);
                recycleTimer = null;
            }
            // 将当前GameObject回收到ObjectPoolPro中
            //GameModule.ObjectPoolPro.Recycle(this.gameObject);
        }

        private IEnumerator AutoRecycleTimer()
        {
            yield return new WaitForSeconds(recycleAfterTime);
            // 计时结束后，如果对象仍处于激活状态，则将其失活（从而触发OnDisable进行回收）
            if (this.gameObject.activeSelf)
            {
                //this.gameObject.SetActive(false); 
                GameModule.GoPool.Recycle(this.gameObject);
                OnRecycle?.Invoke();
            }
        }
    }
}